/**
 * 超时时间配置(两个都不超时,才是不超时)
 * 这里需要配置两个超时时间   一个是openFeign  一个是Hystrix
 *
 * ==============openFeign和ribbon设置超时时间====================
 *  openFeign 的超时由ribbon实现
 *  ribbon:
 *    #指的是建立连接所用的时间，适用于网络状况正常的情况下，两端连接所用的时间
 *    ReadTimeout: 5000
 *    #指的是建立连接后从服务器读取到可用资源所用的时间
 *    ConnectTimeout: 5000
 *
 *
 * ==============Hystrix设置超时时间====================
 * // https://www.cnblogs.com/yinjihuan/p/10940403.html
 * // https://blog.csdn.net/weixin_43846916/article/details/106860555
 *
 * Hystrix超时时间(为一个方法设置超时时间)
 * 1.如果我们使用的是@HystrixCommand注解，那么可以在注解中直接指定超时时间，如下：
 * @HystrixCommand(fallbackMethod="fallback",
 *        commandProperties = {
 *           @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000" )
 *        }
 * )
 *
 *
 * 2.当然也可以指定commandKey，然后在配置文件中配置超时时间(指定一个key,然后在配置文件中配置)
 * @HystrixCommand(fallbackMethod="fallback",commandKey="userGetKey")
 * 配置文件给commandKey配置超时时间：
 * hystrix.command.userGetKey.execution.isolation.thread.timeoutInMilliseconds = 13000
 *
 * 3.全局配置
 * 如果只是想全局的配置，可以配置默认的超时时间：
 * hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
 *
 * 4.接口级别配置
 * 假如我们的Feign Client定义如下：
 * @FeignClient(value = "user-service", fallbackFactory = UserRemoteClientFallbackFactory.class)
 * public interface UserRemoteClient {
 *
 *        @GetMapping("/user/get")
 *    public ResponseData<UserDto> getUser(@RequestParam("id") Long id);
 *
 * }
 *
 * 那么配置如下：
 * hystrix.command.UserRemoteClient#getUser(Long).execution.isolation.thread.timeoutInMilliseconds = 300
 * 为什么要配置成上面的方式呢？
 * 其实就是对commandKey进行配置，只要我们知道commandKey的生成规则就可以对接口级别进行配置，接口级别的规则是 Client名称#方法名(参数类型)
 * 源码在feign.hystrix.SetterFactory.Default中：
 * String commandKey = Feign.configKey(target.type(), method);
 *
 *
 *
 * ========================相关配置文件====================================
 * 一、hystrix熔断指定方法设置超时时间
 * hystrix:
 *   command:
 *     default:  #default全局有效
 *       execution:
 *         timeout:
 *           #是否开启超时熔断
 *           enabled: true
 *         isolation:
 *           thread:
 *             timeoutInMilliseconds: 6000 #断路器超时时间，默认1000ms
 *     HystrixCommonKey:  #HystrixCommandKey：要单独设置超时时间的方法
 *       execution:
 *         timeout:
 *           #是否开启超时熔断，默认true
 *           enabled: true
 *         isolation:
 *           thread:
 *             timeoutInMilliseconds: 10000 #断路器超时时间
 *
 *
 * 二、查看HystrixCommandKey
 * HystrixCommonKey：类名#方法名(参数类型)
 * public static String configKey(Class targetType, Method method) {
 *     StringBuilder builder = new StringBuilder();
 *     builder.append(targetType.getSimpleName());
 *     builder.append('#').append(method.getName()).append('(');
 *     for (Type param : method.getGenericParameterTypes()) {
 *       param = Types.resolve(targetType, targetType, param);
 *       builder.append(Types.getRawType(param).getSimpleName()).append(',');
 *     }
 *     if (method.getParameterTypes().length > 0) {
 *       builder.deleteCharAt(builder.length() - 1);
 *     }
 *     return builder.append(')').toString();//打断点，查看自己方法的 HystrixCommonKey
 *   }
 */